﻿namespace LogicStudio.Framework.UI.Comandos
{
    using Comun;
    using System;
    using System.Windows.Input;

    /// <summary>
    /// Comando para la ejecucion de las acciones sobre el detalle
    /// </summary>
    /// <typeparam name="TContexto">
    /// Tipo de contexto a usarse en el mantenimiento
    /// </typeparam>
    /// <typeparam name="TEntidad">
    /// Tipo de la entidad proncipal del mantenimiento
    /// </typeparam>
    public class ComandoDetalle<TContexto, TEntidad> : ICommand
    {
        #region Atributos

        private readonly IObjetoModelo<TContexto, TEntidad> _modelo;

        #endregion

        #region Eventos

        public event EventHandler CanExecuteChanged;

        #endregion

        #region Constructores

        /// <summary>
        /// Inicializamos una instancia de Comando Detalle
        /// </summary>
        /// <param name="modelo">Objeto que se utiliza de contexto para el editor genérico</param>
        public ComandoDetalle(IObjetoModelo<TContexto, TEntidad> modelo)
        {
            _modelo = modelo;
            if (CanExecuteChanged != null)
            {
                CanExecuteChanged(this, null);
            }
        }

        #endregion

        #region Metodos Publicos

        public bool CanExecute(object parameter)
        {
            return true;
        }

        /// <summary>
        /// Metodo que se ejecuta al invocar al ComandoDetalle
        /// </summary>
        /// <param name="parameter">
        /// Parametro que indica la accion<br />
        /// El parameto de tipo objeto se pasara al modelo en el cual el usuario
        /// programará la acción deseada
        /// </param>
        public void Execute(object parameter)
        {
            _modelo.AplicarAccionDetalle(parameter);
        }

        #endregion
    }
}